/**
 * 引入模块
 * @type {*}
 */
var gulp = require('gulp');
var $ = require('gulp-load-plugins')();
var open = require('open');

/**
 * 定义目录路径
 * @type {{srcPath: string, devPath: string, prdPath: string}}
 */
var app = {
    srcPath:'src/',
    devPath:'build/',
    prdPath:'dist/'
};


/**
 * gulp lib执行以下内容 作用：创建build和dist文件
 */
gulp.task('lib',function () {
    /**
     * gulp.src为：读取bower_components下的所有js文件
     * gulp.dest为：拷贝文件到build/vendor下
     */
    gulp.src('bower_components/**/*.js')
        .pipe(gulp.dest(app.devPath + 'vendor'))
        .pipe(gulp.dest(app.prdPath + 'vendor'))
        .pipe($.connect.reload());
});


/**
 * gulp html执行以下内容 作用：把src/view下的html拷贝到build/view下
 */
gulp.task('html',function () {
    gulp.src(app.srcPath + '**/*.html')
        .pipe(gulp.dest(app.devPath))
        .pipe(gulp.dest(app.prdPath))
        .pipe($.connect.reload());
});


/**
 * 平常不需要用到，因为本项目没有用到服务端
 *
 * gulp json执行以下内容 作用：把src/data下的json文件放到build/data中
 */
gulp.task('json',function () {
    gulp.src(app.srcPath + 'data/**/*.json')
        .pipe(gulp.dest(app.devPath + 'data'))
        .pipe(gulp.dest(app.prdPath + 'data'))
        .pipe($.connect.reload());
});


/**
 * 通过配置一个less，就可以同时编译所有的less
 *
 * $在头部已经声明了
 * cssmin()压缩
 */
gulp.task('less',function () {
    gulp.src(app.srcPath + 'style/index.less')
        .pipe($.plumber())
        .pipe($.less())
        .pipe(gulp.dest(app.devPath + 'css'))
        .pipe($.cssmin())
        .pipe(gulp.dest(app.prdPath + 'css'))
        .pipe($.connect.reload());
});


gulp.task('js',function () {
    gulp.src(app.srcPath + 'script/**/*.js')
        .pipe($.plumber())
        .pipe($.concat('index.js'))
        .pipe(gulp.dest(app.devPath + 'js'))
        .pipe($.uglify())
        .pipe(gulp.dest(app.prdPath + 'js'))
        .pipe($.connect.reload());
});


gulp.task('image',function () {
    gulp.src(app.srcPath + 'image/**/*')
        .pipe(gulp.dest(app.devPath + 'image'))
        .pipe($.imagemin())
        .pipe(gulp.dest(app.prdPath + 'image'))
        .pipe($.connect.reload());
});


/**
 * 批量执行以上的内容
 */
gulp.task('build',['image','js','less','lib','html','json'])


/**
 * 对build和dist两个目录进行删除
 */
gulp.task('clean',function () {
    gulp.src([app.devPath,app.prdPath])
        .pipe($.clean());
});


/**
 * 执行项目 命令为：gulp serve
 * port:1234 端口1234
 * livereload自动刷新浏览器
 */
gulp.task('serve',['build'],function () {
    $.connect.server({
        root:[app.devPath],
        livereload:true,
        port:1234
    });

    // 自动打开浏览器
    open('http://localhost:1234');

    // watch监控文件
    gulp.watch('bower_components/**/*',['lib']);
    gulp.watch(app.srcPath + '**/*.html',['html']);
    gulp.watch(app.srcPath + 'data/**/*.json',['json']);
    gulp.watch(app.srcPath + 'style/**/*.less',['less']);
    gulp.watch(app.srcPath + 'script/**/*.js',['js']);
    gulp.watch(app.srcPath + 'image/*',['image']);

});


/**
 * 一般执行项目要用gulp serve，但这样直接执行gulp就可以了
 */
gulp.task('default',['serve']);



